"""
可以用Python 打开文件 读写文件 关闭文件 的操作
open(name, mode, encoding="UTF-8")
name 文件名也可以包括路径
mode 打开模式 只读 修改 追加
encoding 文件编码 没有特殊情况最后是 UTF-8

name 常用的3种基础访问模式
r  以只读方式打开文件 文件的指针将放在文件的开头这是默认模式
w  打开一个文件用于写入 如果该文件已存在则打开文件,并从头开始编辑   注意原有内容将会被删除 如果该文件不存在创建新文件
a  诶 打开一个文件用于追加.  如果该文件已存在  新的内容将会被写入到已有内容之后  如果文件不存在创建新文件进行写入
"""
# import time  # 调用time(时间)这个库

# 得到一个文件把它传给变量
文件对象 = open("D:/python黑马/测试文件.txt", "r", encoding="UTF-8")  # 文件编码必须用 关键字传参
print(f'这个变量的类型是:{type(文件对象)}')
print()

# 接下来就可以对文件进行各种操作
"""
read() 读取文件
文件对象.read(num)
num  表示要从文件中读取的数据长度(单位是字节/可能是字符,教程说字节)   如果没有传入参数,那么就表示读取文件中所有数据 
"""
"""
readline()
可以按照行的方式把整个文件中的内容进行一次性读取 ,并且返回一个列表,其中每一行的数据为一个元素 
"""
# read 函数没有参数,默认输出全部数据  类型是字符串
print(f'读取文件4个字节内容是:\n{文件对象.read(4)}')  # 读取了这4个字符 下面在操作读取就不再读取这4个字符了
print(f'读取全部内容是:\n{文件对象.read()}')   # 一个小问题 上面读取了4个字符 下面在读取全部数据就排除了上面4个字符 这个是一个特性
print("-----------------1---------------------------")
文件对象.seek(0)  # 指针回归指定地址 这里回归原始状态

文件内容 = 文件对象.readlines()  # 读取文件全部信息, 按行存入列表 每一行作为一个元素
print(f'文件内容 这个变量,数据类型是:{type(文件内容)}')
print(f'文件内容 数据内容是:\n{文件内容}')

print("------------------2--------------------------")
文件对象.seek(0)

# readline() 文件读取一行的输出
文件内容1 = 文件对象.readline()  # 读取文件一行信息, 按行存入字符串
文件内容2 = 文件对象.readline()
print(f'文件内容 这个变量,数据类型是:{type(文件内容1)}')
print(f'文件内容 第一行内容是:\n{文件内容1}')
print(f'文件内容 第二行内容是:\n{文件内容2}')

print("-----------------3---------------------------")
文件对象.seek(0)

# 循环读取文件每一行数据
for 临时 in 文件对象:
    print(临时)  # 循环输出每一行

"""
close 关闭文件对象 
关闭文件对象 也就是关闭对文件的占用 
如果不调用close关闭 同时程序没有停止运行,那么这个文件将一直被Python程序占用 
"""
文件对象.close()  # 文件被关闭 不能在使用文件了

# time.sleep(80000)  # 占用程序多少秒
# 文件内容1 = 文件对象.readline()   # 文件已经被关闭了再调用操作文件就会报错

print("---------4-------------")
print("\n小练习")
# 统计一个文件中出现特定一个词的数量
小练习文件 = open("D:/python黑马/小练习文件.txt", "r", encoding="utf-8")
次数 = 0
for 单行内容 in 小练习文件.readlines():
    print(f'这一行的内容是:{单行内容}')
    单行次数 = 单行内容.count("孙新罡")
    print(f"这一行出现'孙新罡'次数{单行次数}")
    次数 = 次数 + 单行次数
print(f'文件总共出现"孙新罡"几次:{次数} ')

print("---------5-------------")
小练习文件.seek(0)
print("第二种方法")

文件内容 = 小练习文件.read()
次数 = 文件内容.count("孙新罡")
print(f'文件总共出现"孙新罡"几次:{次数} ')
print(文件内容, f'\n这段文字的数据类型{type(文件内容)}')
小练习文件.close()
